Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New #9

Merged
merged 40 commits into from
Jul 22, 2024
Merged

New #9

merged 40 commits into from
Jul 22, 2024

Conversation

jcdkiki
Copy link
Collaborator

@jcdkiki jcdkiki commented Dec 28, 2023

build-oclint.sh клонирует репозиторий oclint, сбрасывает его до версии 22.02 (последняя версия на данный момент) и запускает скрипт сборки oclint`а. Это нужно, чтобы собрать нужные файлы для последующей сборки СВОИХ кастомных правил.

CMakeLists.txt -- франкенштейн из файлов CMakeLists.txt oclint`а. Некоторые части были немного переписаны под нужды проекта, некоторые были слепо скопированы. Работает => не трогаю.

tester.py принимает на вход путь до папки с исходным кодом лабораторной/курсовой работы студента (Ivanov_Ivan_cw/src). Сначала скрипт определяет способ сборки. Доступны способы из блока проверки курсовой на e.moevm:

  • Один c/c++ файл;
  • Makefile;

Далее в папке с исходным кодом работы скрипт создает папку для временных файлов. С этого момента скрипт работает только в ней (для чего это нужно, напишу в самом конце (!!!)). Все файлы копируются во временную папку, после чего в ней запускается bear -- утилита для генерации compile_commands.json. Без этого JSON файла oclint будет проверять все файлы по-отдельности без какого-либо контекста, это нам не нужно.

Также правило TooManyConsecutiveIfStatements было мной переименовано в TooLongIfSequence, потому что так банально короче. Теперь можно изменить MAX_IF_SEQUENCE_LEN (по умолчанию равно 5). Подробнее про конфигурацию oclint`а здесь

(!!!) Утилита bear полноценно СОБИРАЕТ проект со всеми вытекающими: объектные файлы, исполняемый файл, потраченное ВРЕМЯ. Если я правильно понял, изменить это никак нельзя. Если это критично, возможно стоит отказаться от bear и воспользоваться этим:
https://stackoverflow.com/questions/21134120/how-to-turn-makefile-into-json-compilation-database

make --always-make --dry-run \
 | grep -wE 'gcc|g\+\+' \
 | grep -w '\-c' \
 | jq -nR '[inputs|{directory:".", command:., file: match(" [^ ]+$").string[1:]}]' \
 > compile_commands.json

Этот код, похоже, не будет ничего собирать, однако доверия он не вызывает.

Хотелось бы услышать комментарии и критику, в частности критику tester.py. По ощущениям сделал грязь.

@jcdkiki
Copy link
Collaborator Author

jcdkiki commented Dec 28, 2023

Хотелось бы еще поинтересоваться насчет Вашей терминологии: какая мотивация использовать слово "критерий"? В документации oclint`а используется термин "rule", прямой перевод -- "правило", никак не "критерий"

@zmm
Copy link
Contributor

zmm commented Dec 29, 2023

Против слова "правило" ничего не имею, использовал "критерий" просто потому, что не сильно заглядывал в код.

tester.py Outdated
makefile_exists = False

content = os.listdir()
for x in content:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Предлагаю убрать логику "понимания способа сборки" и заменить ее на флаг командной строки (эта логика у нас уже есть в вышестоящих скриптах).

tester.py Outdated

os.chdir('..')
os.remove('compile_commands.json')
os.system("rm -rf .tester_tmp")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Как правило, для цепочек скриптов в качестве способа передачи информации о корректности / некорректности работы используют коды возврата. Добавьте в вашем с скрипте выход с ненулевым кодом, если были найдены ошибки в исходниках (с точки зрения линтера) или произошли любые другие нештатные ситуации.

К нештатным ситуациям я бы отнес любые сбои при запуске внешних команд (это будет такая защита на случай, если мы криво настроим вашу утилиту в рабочем окружении). Поэтому, стоит добавить обработку исключений.

tester.py Outdated
os.system("mv compile_commands.json ../")

for file in files:
os.system(f'/bin/sh -c "oclint --rule=TooLongIfSequence "{file}" | grep etu"')
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я бы вынес в параметры командной строки данного скрипты аргументы для oclint (список используемых правил) - так он станет более гибким.

grep предлагаю убрать - лучше его заменить на обобщенный анализ фидбека от линтера (есть замечания - выводим их как есть + трубим тревогу, нет замечаний - пишем об этом и выходим спокойно)

Copy link

@mirrin00 mirrin00 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Коменнтарии (+ часть ещё в коде):

  1. Pull-request'ы желательно называть +- осмысленно, чтобы понятно к чему он относится
  2. На вики про сборку желательно привести полную команду по установке всего для Ubuntu (как одного из самых попрулярных дистрибутивов)
  3. При пересборке почему-то не подтянулись уже собранные объектники
  4. В инстуркции явно не хватает подробностей о том, как нужно поставить oclint и куда (и нужно ли это делать, потому что судя по скриптам -- нет, а на самом деле да и нужно прочитать инструкцию по установке).
  5. Использование bear не такая большая проблема, тесты же как-то прогоняются == программа как-то собирается. Вот в этот момент можно вызвать bear.
  6. Будет ли работать с компилятором gcc, которые используется в проверках (я может быть потом проверю самостоятельно)

В остальном выглядит хорошо, оно работает, есть понимание как делать дальше

build-oclint.sh Outdated
if [ ! -d oclint ]; then
git clone https://github.com/oclint/oclint.git oclint
cd oclint
git reset --hard d776db51c8574df406b2b0dc1b43b0b9b2d86d34

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Хэш коммита вынести в отдельную переменную

@@ -0,0 +1 @@
cp -r oclint/build/oclint-release/lib/* /usr/local/lib/

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Можно добавить аргумент -- куда конкретно устанавливать

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Заодно нужно это добавить в CMakeLists.txt, чтобы там тоже можно было кастомизировать (или предоставить пример, как это сделать, я сходу не помню все возможности cmake)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тесты надо оставить, это хорошая практика, позволяет проверять, что ничего из работающего раньше не сломалось

Comment on lines 7 to 8
using namespace clang;
using namespace oclint;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не самая хорошая практика подключать namespace, потому что:

  1. Повышается вероятность пересечений имен
  2. Становится менее интуитивно понятно, откуда та или иная функция

Можно подключать namespace, если это часть используемого проекта для упрощения или есть вложенные namespace, чтобы сократить обращение. std обычно не подключают (из быстрого нашел такое: https://stackoverflow.com/questions/2712076/how-to-use-an-iterator/2712125#2712125)

Comment on lines 14 to 16
size_t getIfComplexity(IfStmt *if_stmt)
{
Stmt *else_stmt = if_stmt->getElse();

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Желательно заменить на цикл, с рекурсией все может быстро закончится (а chatgpt или copilot могут нагенерировать миллион if-else statements )

@@ -80,7 +85,7 @@ class TooManyConsecutiveIfStatementsRule : public AbstractASTVisitorRule<TooMany
else {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. Почему-то else с новой строки, а не продолжение предыдущей
  2. Github не даёт оставить комментарий выше, поэтому оставляю здесь: попробуйте использовать foreach цикл (можно почитать здесь и здесь)

{
private:
int max_if_sequence_len;
size_t getIfComplexity(IfStmt *if_stmt)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Если я правильно понял, то это данный критерий: #4 . По коду я вижу, что проверяется только последовательность if'ов, но не проверяется, что они похожи (я слепой, поэтому если чего-то не увидел, то мне нужна явная строчка). Это разные проверки, так как бывают функции, которые проверяются корректность данных и в них может содержать много последовательных if, но они все проверяют разные условия, и это нормально (ненормально, если они в основной функции, но это уже совсем другая история)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Пример кода:

#include <stdio.h>

int main()
{
    int x = 0;
    int param1 = 0;
    float param2 = 0.0;
    float param3 = 0.0;
    float param4 = 0.0;
    int opt = 0;
    int value = -1;
    scanf("%d %d %f %f %f %d %d", &x, &param1, &param2, &param3, &param4, &opt, &value);

    if (x == 0) {
        puts("Zero");
    }
    if(param1 > 100){
        puts("Too large");
    }
    if(param2 < 0.0){
        puts("Negative");
    }
    if(param3 * param2 > 1e+5){
        puts("Invalid");
    }
    if(param4 / 2 < param1){
        puts("Unique case");
    }
    if(opt < 0 || opt > 6){
        puts("Invalid option");
    }
    if(value == -1){
        puts("By default");
    }
    return 0;
}

Проверки разные и все важны, но при данной реализации проверки, будет предупреждение

tester.py Outdated

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это хорошо, что вы подумали заранее об удобном способе запуска. Однако есть несколько моментов:

  1. Что будет, если не использовать bear (соответсвенно не использовать compile_commands.json), а анализировать файлы по отдельности? Вроде бы, мы пока проверяем стандартные конструкции языка, которые должны работать и без дополнительных файлов
  2. У нас в коде самих проверок уже есть определение способа сборки. Добавление данной функциональности сюда выглядит как дублирование кода, которое придётся дополнительно поддерживать + делает менее применим данный скрипт
  3. Выглядит так, что данный скрипт делает следующее: 1) определяет способ сборки; 2) собирает проект с захватом bear; 3) парсит вывод; 4) Подчищает какие-то лишние файлы . Из трёх пункто непосредственно к утилите относятся только 2 и 4 (1 -- это отвественность системы проверки, 3 -- какие варнинги важны, а какие нет тоже определеяет система проверка, назначение утилиты их подсветить, если они есть). Получается, что можно упростить до следующего: собрать проект с захватом bear при помощи командой cmd, которую подаст пользователь; удалить лишние временные файлики. Кажется, для этого не нужно python и можно обойтись стандартными командами bash для всего этого

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. Что будет, если не использовать bear (соответсвенно не использовать compile_commands.json)

Размышляя над этим вопросом, пришел к двум выводам:

  1. В текущей реализации tester.py не проверяет подключаемые заголовочные файлы (а в них тоже можно написать что-нибудь "запрещенное");
  2. Критерии, как вы и сказали, действительно не требуют ничего сверхъестественного.

Поэтому вместо bear использовать oclint напрямую для каждого .c/.cpp/.h файла звучит как хороший вариант. Но здесь, как мне кажется, возникают другие проблемы:

  1. В одной из лабораторных мне пришлось воспользоваться -std=c99. Причину уже не помню. Может ли oclint, не зная про этот флаг, совершить какую-нибудь ошибку? Стоит это проверять?
  2. Студенты могут поэкспериментировать и прийти к выводу, что .c файл с русской с не проверяется системой ( Гомоглифы Юникода). С bear такой проблемы не возникнет, имена файлов он прослушает правильно. Без bear вижу решение только в сообщении: Ошибка: посторонние файлы в src.

Может это и не проблемы вовсе, но это было первым, что прошло в голову.

README.md Outdated
Вся информация в wiki.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В README нужно хотя бы оставить простейшую инструкцию (без деталей) как собрать и запустить. Для деталей можно оставить ссылку на конкретные страницы на вики

@mirrin00 mirrin00 mentioned this pull request Jan 19, 2024
@jcdkiki
Copy link
Collaborator Author

jcdkiki commented Feb 3, 2024

Чуть позже постараюсь прокомментировать и дополнить.

@jcdkiki
Copy link
Collaborator Author

jcdkiki commented Feb 4, 2024

Что сделано:

  • В wiki по сборке добавлена команда (TL;DR), устанавливающая все зависимости, собирающая и устанавливающая OCLint и критерии.
  • В скрипт install-oclint.sh добавлена установка самого бинарника oclint.
  • Хэш коммита в build_oclint.sh вынесен в отдельную переменную. Имя переменной спорно (OCLINT_22_02_COMMIT)... С одной стороны, этот репозиторий рассчитал на конкретную версию OCLint, а с другой стороны никто не мешает попробовать другие.
  • Инструкция сборки в README файле.
  • Удален tester.py... Действительно, странная вещь. Заменил ее двумя bash-скриптами внутри папки examples. Про них информация в README.

При пересборке почему-то не подтянулись уже собранные объектники_

При пересборке чего именно? Если при пересборке кастомных критериев, то не знаю в чем дело. Если же при пересборке самого OCLint, то:

  1. Не вижу смысла его пересобирать, т.к. от этой сборки конкретно мне нужны только некоторые библиотеки (.so и .a), которые там собираются. Нужны они, поскольку они линкуются с нашими критериями.
  2. Если это действительно критично, тогда не знаю что делать. Скрипт build внутри oclint/oclint-scripts , насколько я понимаю, собирает oclint без никаких лишних телодвижений, ОДНАКО у меня build зависает на одном из пунктов (зависает настолько, что компьютер перестает реагировать на любые нажатия клавиш и движения мышью, перезагружаюсь зажатием кнопки питания)

Будет ли работать с компилятором gcc, которые используется в проверках?

У меня работает (Debian 12). Остальное не могу знать.

@jcdkiki
Copy link
Collaborator Author

jcdkiki commented Feb 9, 2024

  • do-everything.sh - это тот самый one-liner, который устанавливает все зависимости, собирает OCLint, собирает наши правила и всё устанавливает
  • do-rules.sh - это скрипт, который собирает и устанавливает наши правила без пересборки OCLint`а. Полезен, когда пересобираешь правило по 10 раз. Можно исполнять из любой директории, ничего не поломается. Я лично исполнял внутри examples.
  • Переделал примеры. Теперь в них проще ориентироваться.
  • Проверка на goto уже реализована в OCLint.
  • Новое правило (критерий??????): MallocSizeofRule

@jcdkiki
Copy link
Collaborator Author

jcdkiki commented Feb 26, 2024

GlobalVariableRule отлавливает глобальные и static переменные

@AndrewGavril
Copy link

AndrewGavril commented Mar 3, 2024

  1. Предлагаю объединить скрипты в один в виде функций, чтобы каждый скрипт был автономен и выполнял все шаги с зависимостями. Добавить скрипту аргументы для вызова нужных функций: build, intall deps, install oclint, build examples, run example . Добавьте скрипту справку по ее использованию. В качестве альтернативы можно использовать существующие скрипты, но в Makefile (там как раз можно проверить установлен ли oclint, сбилжены ли примеры и остальные зависимости для выполнения вышеописанных функций). На текущий момент readme и wiki несколько отличаются и нужно разбираться, чтобы воспроизвести результат. Скрипты должны минимизировать ошибки пользователя.
  2. После пункта 1 нужно обновить всю документацию (wiki и readme). В Readme добавить самый простой способ запуска примера, вариации запуска и использования скриптов уже можно вынести на wiki.
  3. Добавьте примеры для итогового запуска примера. Я дошел до этапа запуска test-gcc.sh, но не знаю параметров oclint. которые нужно передавать.

@jcdkiki
Copy link
Collaborator Author

jcdkiki commented Mar 14, 2024

Создал один большой Makefile, заменяющий все .sh скрипты для установки и сборки всего подряд. Про него можно почитать в обновленном wiki.

README.md тоже был обновлен

@jcdkiki
Copy link
Collaborator Author

jcdkiki commented Mar 19, 2024

55caf7e

Доделанный TooLongIfSequenceRule

Проверяет подряд идущие if-ы не только на их существование, но и смотрит, какие у этих if-ов условия. Сравнивая условия, он просто проходится по их синтаксическим деревьям.

Степень "жесткости" проверки можно настраивать. Этот критерий имеет следующие параметры:

MAX_IF_SEQUENCE_LEN (по умолчанию равен 5) - это максимальная разрешенная длина последовательности ифов с похожими условиями

CHECK_BINARY_OPERATOR (по умолчанию равен 1) - если равен единице, тогда критерий будет смотреть на знаки в условиях if-ов. Например, "x < 5" и "x > 5" для него будут разными условиями. Чтобы выключить такое поведение, надо присвоить этому параметру значение 0.

CHECK_FUNCTION_CALL (по умолчанию равен 1) - если равен единице, тогда критерий будет смотреть на то, какие функции вызываются внутри условий if-ов. Например, "gcd(x, y)" и "lcm(x, y)" для него будут разными выражениями и условия, их содержащие, будут тоже считаться непохожими. Чтобы выключить такое поведение, надо присвоить этому параметру значение 0.

Напомню, как передавать параметры OCLint`у:

через флажок -rc:

-rc=PARAMETER=VALUE

т.е. можно писать так:

examples/test-gcc.sh examples/ex-if -rc=CHECK_FUNCTION_CALL=0 -rc=MAX_IF_SEQUENCE_LEN=7

@thehighestmath
Copy link
Collaborator

thehighestmath commented Jul 5, 2024

Не смог запустить

Вроде всё делал по инструкции, а сборка сломалась

➜  oclint_extensions git:(new) sudo make install
[sudo] password for kirillkry: 
apt install -y ninja-build cmake bear
echo "install deps: OK"
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages were automatically installed and are no longer required:
  cloud-guest-utils eatmydata libeatmydata1 libpkcs11-helper1 libsysmetrics1
  python-babel-localedata python3-babel python3-configobj python3-jinja2
  python3-json-pointer python3-jsonpatch python3-jsonschema python3-pyrsistent
  python3-serial
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
  cmake-data dh-elpa-helper libear libfmt8 libgrpc++1 libgrpc10 libjsoncpp25
  librhash0 libspdlog1
Suggested packages:
  cmake-doc cmake-format
The following NEW packages will be installed:
  bear cmake cmake-data dh-elpa-helper libear libfmt8 libgrpc++1 libgrpc10
  libjsoncpp25 librhash0 libspdlog1 ninja-build
0 upgraded, 12 newly installed, 0 to remove and 12 not upgraded.
Need to get 9,790 kB of archives.
After this operation, 43.4 MB of additional disk space will be used.
Get:1 https://mirror.yandex.ru/ubuntu jammy/universe amd64 libfmt8 amd64 8.1.1+ds1-2 [60.2 kB]
Get:2 https://mirror.yandex.ru/ubuntu jammy/universe amd64 libgrpc10 amd64 1.30.2-3build6 [1,470 kB]
Get:3 https://mirror.yandex.ru/ubuntu jammy/universe amd64 libgrpc++1 amd64 1.30.2-3build6 [402 kB]
Get:4 https://mirror.yandex.ru/ubuntu jammy/universe amd64 libspdlog1 amd64 1:1.9.2+ds-0.2 [126 kB]
Get:5 https://mirror.yandex.ru/ubuntu jammy/universe amd64 libear amd64 3.0.18-1 [138 kB]
Get:6 https://mirror.yandex.ru/ubuntu jammy/universe amd64 bear amd64 3.0.18-1 [348 kB]
Get:7 https://mirror.yandex.ru/ubuntu jammy/main amd64 libjsoncpp25 amd64 1.9.5-3 [80.0 kB]
Get:8 https://mirror.yandex.ru/ubuntu jammy/main amd64 librhash0 amd64 1.4.2-1ubuntu1 [125 kB]
Get:9 https://mirror.yandex.ru/ubuntu jammy/main amd64 dh-elpa-helper all 2.0.9ubuntu1 [7,610 B]
Get:10 https://mirror.yandex.ru/ubuntu jammy-updates/main amd64 cmake-data all 3.22.1-1ubuntu1.22.04.2 [1,913 kB]
Get:11 https://mirror.yandex.ru/ubuntu jammy-updates/main amd64 cmake amd64 3.22.1-1ubuntu1.22.04.2 [5,010 kB]
Get:12 https://mirror.yandex.ru/ubuntu jammy/universe amd64 ninja-build amd64 1.10.1-1 [111 kB]
Fetched 9,790 kB in 2s (5,219 kB/s)    
Selecting previously unselected package libfmt8:amd64.
(Reading database ... 246958 files and directories currently installed.)
Preparing to unpack .../00-libfmt8_8.1.1+ds1-2_amd64.deb ...
Unpacking libfmt8:amd64 (8.1.1+ds1-2) ...
Selecting previously unselected package libgrpc10:amd64.
Preparing to unpack .../01-libgrpc10_1.30.2-3build6_amd64.deb ...
Unpacking libgrpc10:amd64 (1.30.2-3build6) ...
Selecting previously unselected package libgrpc++1:amd64.
Preparing to unpack .../02-libgrpc++1_1.30.2-3build6_amd64.deb ...
Unpacking libgrpc++1:amd64 (1.30.2-3build6) ...
Selecting previously unselected package libspdlog1:amd64.
Preparing to unpack .../03-libspdlog1_1%3a1.9.2+ds-0.2_amd64.deb ...
Unpacking libspdlog1:amd64 (1:1.9.2+ds-0.2) ...
Selecting previously unselected package libear:amd64.
Preparing to unpack .../04-libear_3.0.18-1_amd64.deb ...
Unpacking libear:amd64 (3.0.18-1) ...
Selecting previously unselected package bear.
Preparing to unpack .../05-bear_3.0.18-1_amd64.deb ...
Unpacking bear (3.0.18-1) ...
Selecting previously unselected package libjsoncpp25:amd64.
Preparing to unpack .../06-libjsoncpp25_1.9.5-3_amd64.deb ...
Unpacking libjsoncpp25:amd64 (1.9.5-3) ...
Selecting previously unselected package librhash0:amd64.
Preparing to unpack .../07-librhash0_1.4.2-1ubuntu1_amd64.deb ...
Unpacking librhash0:amd64 (1.4.2-1ubuntu1) ...
Selecting previously unselected package dh-elpa-helper.
Preparing to unpack .../08-dh-elpa-helper_2.0.9ubuntu1_all.deb ...
Unpacking dh-elpa-helper (2.0.9ubuntu1) ...
Selecting previously unselected package cmake-data.
Preparing to unpack .../09-cmake-data_3.22.1-1ubuntu1.22.04.2_all.deb ...
Unpacking cmake-data (3.22.1-1ubuntu1.22.04.2) ...
Selecting previously unselected package cmake.
Preparing to unpack .../10-cmake_3.22.1-1ubuntu1.22.04.2_amd64.deb ...
Unpacking cmake (3.22.1-1ubuntu1.22.04.2) ...
Selecting previously unselected package ninja-build.
Preparing to unpack .../11-ninja-build_1.10.1-1_amd64.deb ...
Unpacking ninja-build (1.10.1-1) ...
Setting up ninja-build (1.10.1-1) ...
Setting up libgrpc10:amd64 (1.30.2-3build6) ...
Setting up dh-elpa-helper (2.0.9ubuntu1) ...
Setting up libjsoncpp25:amd64 (1.9.5-3) ...
Setting up librhash0:amd64 (1.4.2-1ubuntu1) ...
Setting up libfmt8:amd64 (8.1.1+ds1-2) ...
Setting up libspdlog1:amd64 (1:1.9.2+ds-0.2) ...
Setting up cmake-data (3.22.1-1ubuntu1.22.04.2) ...
Setting up libgrpc++1:amd64 (1.30.2-3build6) ...
Setting up libear:amd64 (3.0.18-1) ...
Setting up bear (3.0.18-1) ...
Setting up cmake (3.22.1-1ubuntu1.22.04.2) ...
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for libc-bin (2.35-0ubuntu3.8) ...
install deps: OK
Cloning into 'oclint-json-compilation-database'...
remote: Enumerating objects: 91, done.
remote: Total 91 (delta 0), reused 0 (delta 0), pack-reused 91
Receiving objects: 100% (91/91), 18.16 KiB | 476.00 KiB/s, done.
Resolving deltas: 100% (41/41), done.
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  514M  100  514M    0     0  10.1M      0  0:00:50  0:00:50 --:--:-- 10.2M
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
LLVM_ROOT: /home/kirillkry/moevm/oclint_extensions/oclint/build/llvm-install
-- Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found version "1.2.11") 
-- Found LLVM LLVM_PACKAGE_VERSION: 13.0.1 - LLVM_VERSION_RELEASE: 13.0.1
-- Using LLVMConfig.cmake in: /home/kirillkry/moevm/oclint_extensions/oclint/build/llvm-install/lib/cmake/llvm
-- Configuring done
-- Generating done
-- Build files have been written to: /home/kirillkry/moevm/oclint_extensions/oclint/build/oclint-core
[13/13] Linking CXX static library lib/libOCLintCore.a
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
LLVM_ROOT: /home/kirillkry/moevm/oclint_extensions/oclint/build/llvm-install
-- Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found version "1.2.11") 
-- Found LLVM LLVM_PACKAGE_VERSION: 13.0.1 - LLVM_VERSION_RELEASE: 13.0.1
-- Using LLVMConfig.cmake in: /home/kirillkry/moevm/oclint_extensions/oclint/build/llvm-install/lib/cmake/llvm
-- Configuring done
-- Generating done
-- Build files have been written to: /home/kirillkry/moevm/oclint_extensions/oclint/build/oclint-metrics
[5/5] Linking CXX static library lib/libOCLintMetric.a
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
LLVM_ROOT: /home/kirillkry/moevm/oclint_extensions/oclint/build/llvm-install
-- Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found version "1.2.11") 
-- Found LLVM LLVM_PACKAGE_VERSION: 13.0.1 - LLVM_VERSION_RELEASE: 13.0.1
-- Using LLVMConfig.cmake in: /home/kirillkry/moevm/oclint_extensions/oclint/build/llvm-install/lib/cmake/llvm
-- Configuring done
-- Generating done
-- Build files have been written to: /home/kirillkry/moevm/oclint_extensions/oclint/build/oclint-rules
[151/151] Linking CXX shared library rules.dl/libUnusedMethodParameterRule.so
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
LLVM_ROOT: /home/kirillkry/moevm/oclint_extensions/oclint/build/llvm-install
-- Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found version "1.2.11") 
-- Found LLVM LLVM_PACKAGE_VERSION: 13.0.1 - LLVM_VERSION_RELEASE: 13.0.1
-- Using LLVMConfig.cmake in: /home/kirillkry/moevm/oclint_extensions/oclint/build/llvm-install/lib/cmake/llvm
-- Configuring done
-- Generating done
-- Build files have been written to: /home/kirillkry/moevm/oclint_extensions/oclint/build/oclint-reporters
[12/12] Linking CXX shared library reporters.dl/libJSONReporter.so
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
LLVM_ROOT: /home/kirillkry/moevm/oclint_extensions/oclint/build/llvm-install
-- Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found version "1.2.11") 
-- Found LLVM LLVM_PACKAGE_VERSION: 13.0.1 - LLVM_VERSION_RELEASE: 13.0.1
-- Using LLVMConfig.cmake in: /home/kirillkry/moevm/oclint_extensions/oclint/build/llvm-install/lib/cmake/llvm
-- Configuring done
-- Generating done
-- Build files have been written to: /home/kirillkry/moevm/oclint_extensions/oclint/build/oclint-driver
[7/14] Building CXX object lib/CMakeFiles/OCLintDriver.dir/ConfigFile.cpp.o
/home/kirillkry/moevm/oclint_extensions/oclint/oclint-driver/lib/ConfigFile.cpp: In function ‘llvm::Optional<bool> createOptionalBool(oclint::option::TriState)’:
/home/kirillkry/moevm/oclint_extensions/oclint/oclint-driver/lib/ConfigFile.cpp:181:1: warning: control reaches end of non-void function [-Wreturn-type]
  181 | }
      | ^
[14/14] Linking CXX executable bin/oclint-22.02
build oclint: OK
cp -r oclint/build/oclint-release/lib/* /usr/local/lib/
cp -r oclint/build/oclint-release/bin/* /usr/local/bin/
echo "install oclint: OK"
install oclint: OK
Error: could not load cache
cp: cannot stat 'compile_commands.json': No such file or directory
CMake Error: Error processing file: /home/kirillkry/moevm/oclint_extensions/build/cmake_install.cmake
➜  oclint_extensions git:(new) neofetch
            .-/+oossssoo+/-.               kirillkry@i110745558 
        `:+ssssssssssssssssss+:`           -------------------- 
      -+ssssssssssssssssssyyssss+-         OS: Ubuntu 22.04.4 LTS x86_64 
    .ossssssssssssssssssdMMMNysssso.       Host: Latitude 5521 
   /ssssssssssshdmmNNmmyNMMMMhssssss/      Kernel: 6.5.0-41-generic 
  +ssssssssshmydMMMMMMMNddddyssssssss+     Uptime: 22 hours, 30 mins 
 /sssssssshNMMMyhhyyyyhmNMMMNhssssssss/    Packages: 2117 (dpkg), 12 (snap) 
.ssssssssdMMMNhsssssssssshNMMMdssssssss.   Shell: zsh 5.8.1 
+sssshhhyNMMNyssssssssssssyNMMMysssssss+   Resolution: 1920x1080, 2560x1440 
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   DE: GNOME 42.9 
ossyNMMMNyMMhsssssssssssssshmmmhssssssso   WM: Mutter 
+sssshhhyNMMNyssssssssssssyNMMMysssssss+   WM Theme: Adwaita 
.ssssssssdMMMNhsssssssssshNMMMdssssssss.   Theme: Yaru-dark [GTK2/3] 
 /sssssssshNMMMyhhyyyyhdNMMMNhssssssss/    Icons: Yaru [GTK2/3] 
  +sssssssssdmydMMMMMMMMddddyssssssss+     Terminal: gnome-terminal 
   /ssssssssssshdmNNNNmyNMMMMhssssss/      CPU: 11th Gen Intel i7-11850H (16) @ 
    .ossssssssssssssssssdMMMNysssso.       GPU: Intel TigerLake-H GT1 [UHD Grap 
      -+sssssssssssssssssyyyssss+-         Memory: 6293MiB / 31814MiB 
        `:+ssssssssssssssssss+:`
            .-/+oossssoo+/-.                                       
                                                                   

@thehighestmath thehighestmath merged commit 0748849 into main Jul 22, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants